package io.gitee.kotle.player.ui

import io.gitee.kotle.player.core.IPlayer


/**
 * 与[IPlayer]相关的view，应该继承此类
 */
interface IPlayerView<Media, Model : IPlayer.IModel<Media>, Config : IPlayerView.IConfig<Media, Model>> :
    IPlayer.IListener<Media, Model> {

    /**
     * 关联[IConfig]
     */
    fun onPlayerViewConfigCreated(player: IPlayer<Media, Model>, config: Config) {}

    /**
     * 取消关联[IConfig]，做好资源回收
     */
    fun onPlayerViewConfigDestroyed(player: IPlayer<Media, Model>, config: Config) {}

    /**
     * 是否需要在关联的时候，添加监听器
     * 返回false，[IPlayer.IListener]不会回调
     */
    fun needPlayerListener() = false

    /**
     * 提供对象创建
     * 其他配置根据自己需求扩展
     */
    interface IConfig<Media, Model : IPlayer.IModel<Media>> {
        /**
         * 播放器对象
         */
        val player: IPlayer<Media, Model>
    }
}